package zzf;

import bean.Book;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@Controller
public class HelloController {

    @RequestMapping("/hello")
    public String helloTest(){
        System.out.println("hello...");
        return "success";
    }

    /*
    * SpringMVC获取请求上的信息
    * 1:默认获取请求参数:
    *   1:直接给方法入参写一个和请求参数名称相同的变量,这个变量就用来接收请参数的值
    *       参数值可以有,可以没有
    *   2:@RequestParam("user"),表示username = Request.getParameter("user")
    *       使用了@RequestParam("user"),那么这里边的参数默认是必须要有的
    *
    *       value:要获取的参数的key
    *       required:这个参数是否必须
    *       defaultValue:这个参数的默认值
    *   3:PathVariable:获取请求路径上的值的,不能获取到请求的参数,和@RequestParam是不同的
    *
    * 2:获取请求头中的值:
    *   @RequestHeader("User-Agent")String agent)
    *       agent = request.getHeader("User-Agent")
    *   如果请求头中没有对应的值就会报错
    *
    * 3:获取Cookie中的值
    *   @CookieValue
    * */
    @RequestMapping("hello02")
    public String hello01(@RequestParam(value = "user",required = false,defaultValue = "没找到用户名")String username,
                          @RequestParam(value = "pwd",required = false,defaultValue = "没找到密码")String pwd,
                          @RequestHeader(value = "User-Agent",required = false,defaultValue = "没有带这个值")String agent,
                          @CookieValue(value = "JSESSIONID",required = false,defaultValue = "没有sessionID")String jid){
        System.out.println("获取到username:"+username);
        System.out.println("获取到pwd:"+pwd);
        System.out.println("获取到User-Agent:"+agent);
        System.out.println("获取到JSESSIONID:"+jid);

        return "success";
    }

    /*
    * 如果我们的请求参数是一个pojo
    * SpringMVC会自动为这个pojo赋值
    * 1:将pojo中的每一个属性,从request参数中尝试取出,并且封装到对象中
    * 2:还可以级联封装,
    *
    * 问题:提交数据可能乱码
    * 1:请求乱码:
    *   GET请求:改server.xml
    *   POST请求:在第一次获取qi
    *
    * 2:响应乱码:
    *   response.setContentType("text/heml;charset=utf-8")
    * */
    @RequestMapping("/book")
    public String addBook(Book book){
        System.out.println("添加一个图书:" + book);
        return "success";
    }

    /*
    * SpringMVC可以直接在参数上写原生API
    * */
    @RequestMapping("/handle03")
    public String handle03(HttpSession session, HttpServletRequest request){
        request.setAttribute("reqParam","我是请求域中的参数");
        session.setAttribute("sessionParam","我是Session域中的参数");
        return "success";
    }
}
